#!/usr/bin/env python
"""
更新DeepSeek模型API密钥的脚本
"""
import os
import sys
import requests
from dotenv import load_dotenv

# 添加项目路径
sys.path.append(os.path.dirname(os.path.abspath(__file__)))

# 加载环境变量
load_dotenv()

def update_deepseek_api_key():
    """更新DeepSeek模型的API密钥"""
    # 服务器地址
    base_url = "http://localhost:8989"
    
    # 用户登录信息（这里使用默认的管理员账户）
    # 在实际使用中，您需要使用真实的用户名和密码
    login_data = {
        "email": "admin@example.com",
        "password": "admin123"
    }
    
    try:
        # 1. 登录获取访问令牌
        print("正在登录...")
        login_response = requests.post(f"{base_url}/api/v1/auth/login", json=login_data)
        
        if login_response.status_code != 200:
            print(f"登录失败: {login_response.status_code} - {login_response.text}")
            return False
            
        access_token = login_response.json()["access_token"]
        print("登录成功!")
        
        # 2. 获取所有模型
        print("正在获取模型列表...")
        headers = {"Authorization": f"Bearer {access_token}"}
        models_response = requests.get(f"{base_url}/api/v1/llm/models", headers=headers)
        
        if models_response.status_code != 200:
            print(f"获取模型列表失败: {models_response.status_code} - {models_response.text}")
            return False
            
        models = models_response.json()
        print(f"找到 {len(models)} 个模型")
        
        # 3. 查找DeepSeek模型
        deepseek_model = None
        for model in models:
            if model["provider"] == "deepseek":
                deepseek_model = model
                break
                
        if not deepseek_model:
            print("未找到DeepSeek模型")
            return False
            
        print(f"找到DeepSeek模型: {deepseek_model['name']} (ID: {deepseek_model['id']})")
        
        # 4. 更新API密钥
        print("正在更新API密钥...")
        # 这里使用用户提供的API密钥
        api_key = "sk-284e8ed7d42e4395bae8b913b1844b59"
        
        update_data = {
            "api_key": api_key
        }
        
        update_response = requests.put(
            f"{base_url}/api/v1/llm/models/{deepseek_model['id']}",
            headers=headers,
            json=update_data
        )
        
        if update_response.status_code != 200:
            print(f"更新API密钥失败: {update_response.status_code} - {update_response.text}")
            return False
            
        updated_model = update_response.json()
        print(f"API密钥更新成功!")
        print(f"模型名称: {updated_model['name']}")
        print(f"提供商: {updated_model['provider']}")
        print(f"模型ID: {updated_model['llm_model_id']}")
        
        return True
        
    except Exception as e:
        print(f"发生错误: {str(e)}")
        return False

if __name__ == "__main__":
    success = update_deepseek_api_key()
    if success:
        print("\nDeepSeek API密钥更新完成!")
    else:
        print("\nDeepSeek API密钥更新失败!")
        sys.exit(1)